"""
冒泡的基本思想：每次比较两个相邻的元素，如果第一个比第二个大，就交换他们两个。
冒泡的原理：每一趟只能确定将一个数归位
冒泡排序的核心部分是：双重嵌套排序
时间复杂度：O(n^2)

"""

import unittest
def bubbleSort(li):
    for i in range(len(li)-1):
        for j in range(len(li)-1-i):
            if li[j+1] > li[j]: 
                li[j],li[j+1]=li[j+1],li[j]
    print(li)
# 进阶，若带上姓名，分数，按照分数进行排序，然后输出姓名如何实现？
# 将if li[j+1] > li[j]:  置换为 if li[j+1][1] > li[j][1]: 

class TestBubbleSort(unittest.TestCase):

    def test_empty_list(self):
        li = []
        bubbleSort(li)
        self.assertEqual(li, [])

    def test_sorted_list(self):
        li = [1, 2, 3, 4, 5]
        bubbleSort(li)
        self.assertEqual(li, [5, 4, 3, 2, 1])

    def test_unsorted_list(self):
        li = [5, 4, 3, 2, 1]
        bubbleSort(li)
        self.assertEqual(li, [5, 4, 3, 2, 1])

    def test_list_with_duplicates(self):
        li = [3, 1, 2, 3, 2, 1]
        bubbleSort(li)
        self.assertEqual(li, [3, 3, 2, 2, 1, 1])

if __name__ == '__main__':
    unittest.main()


